# -*- coding: utf-8 -*- 
# @Time : 2022/4/3 10:34 
# @Author : zzuxyj 
# @File : 08-nn-linear.py


"""
线性激活
输入特征数  输出特征数

PyTorch的nn.Linear()是用于设置网络中的全连接层的
需要注意在二维图像处理的任务中，全连接层的输入与输出一般都设置为二维张量，形状通常为[batch_size, size]，不同于卷积层要求输入输出是四维张量
"""
import torch
import torchvision
from torch import nn
from torch.nn import Linear
from torch.utils.data import DataLoader
#画图
from matplotlib.font_manager import FontProperties
from pandas import np
import matplotlib.pyplot as plt

# 数据集加载
test_set = torchvision.datasets.CIFAR10("../dataset/CIFAR10", download=True,
                                        transform=torchvision.transforms.ToTensor(), train=False)

dataloader = DataLoader(test_set, batch_size=64, shuffle=True, drop_last=False)


# 定义网络模型
class Model(nn.Module):
    def __init__(self) -> None:
        super().__init__()
        # Linear(in_features: int, out_features: int)
        self.linear = Linear(196608, 10)

    def forward(self, input):
        output = self.linear(input)
        return output


# 定义对象
model = Model()

# 数据
for data in dataloader:
    imgs, target = data
    # 变形
    imgs = torch.flatten(imgs)
    print(imgs)
    output = model(imgs)
    print(output)
    break

"""
# 散点图
font = FontProperties(fname=r"D:\simhei.ttf", size=14)

xValue = list(range(0, 196608))
yValue = [x * np.random.rand() for x in xValue]

plt.title(u'散点图示例', FontProperties=font)

plt.xlabel('x-value')
plt.ylabel('y-label')
# plt.scatter(x, y, s, c, marker)
# x: x轴坐标
# y：y轴坐标
# s：点的大小/粗细 标量或array_like 默认是 rcParams['lines.markersize'] ** 2
# c: 点的颜色
# marker: 标记的样式 默认是 'o'
plt.legend()

plt.scatter(xValue, yValue, s=20, c="#ff1212", marker='o' )
plt.show()
"""
